#ifndef CONFIGVIEWMANAGER_H
#define CONFIGVIEWMANAGER_H

#include <QObject>
#include <QStackedWidget>
#include <QJsonDocument>
#include <QJsonArray>
#include <QMap>
#include <QWidget>
#include <QButtonGroup>

// 配置视图类型
enum ConfigViewType {
    GroupView,    // 分组视图
    PropertyView, // 属性视图
    JsonView,     // JSON视图
    CardView      // 卡片视图
};

class ConfigViewManager : public QObject
{
    Q_OBJECT
public:
    explicit ConfigViewManager(QStackedWidget *stackedWidget, QObject *parent = nullptr);

    // 设置当前视图类型
    void setCurrentView(ConfigViewType type);

    // 更新配置数据
    void updateConfig(const QJsonArray &configArray);

    // 获取修改后的配置
    QJsonArray getModifiedConfig() const;

    // 重置为原始配置
    void resetToOriginal();

    // 应用编辑的配置
    void applyEdits();

signals:
    // 配置修改信号
    void configModified();
    // 发送配置请求
    void sendConfigRequested(const QJsonArray &config);

public slots:
    // 发送当前配置
    void sendCurrentConfig();

private:
    // 初始化视图
    void initGroupView();
    void initPropertyView();
    void initJsonView();
    void initCardView();

    // 更新视图数据
    void updateGroupView();
    void updatePropertyView();
    void updateJsonView();
    void updateCardView();

    // 创建可编辑控件
    QWidget* createEditableWidget(const QString &key, const QJsonValue &value,
                                 int configIndex, int itemIndex = -1);
    // 从控件获取值
    QJsonValue getValueFromWidget(QWidget *widget) const;

private:
    QStackedWidget *m_stackedWidget; // 堆叠窗口
    QJsonArray m_originalConfig;     // 原始配置数据
    QJsonArray m_currentConfig;      // 当前配置数据（可修改）
    QJsonArray m_configArray;        // 配置数据
    QString m_rawJson;               // 原始JSON字符串

    // 视图组件
    QWidget *m_groupView = nullptr;
    QWidget *m_propertyView = nullptr;
    QWidget *m_jsonView = nullptr;
    QWidget *m_cardView = nullptr;

    // 编辑控件映射：控件指针 -> (配置索引, 项索引, 键)
    QMap<QWidget*, QPair<int, QPair<int, QString>>> m_editWidgets;
};

#endif // CONFIGVIEWMANAGER_H
